.TH std::next 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::next \- std::next

.SH Synopsis
   Defined in header <iterator>
   template< class InputIt >                                              \fI(since C++11)\fP
   InputIt next( InputIt it, typename                                     \fI(until C++17)\fP
   std::iterator_traits<InputIt>::difference_type n = 1 );
   template< class InputIt >

   constexpr                                                              \fI(since C++17)\fP

   InputIt next( InputIt it, typename
   std::iterator_traits<InputIt>::difference_type n = 1 );

   Return the n^th successor (or -n^th predecessor if n is negative) of iterator it.

.SH Parameters

   it         -         an iterator
   n          -         number of elements to advance
.SH Type requirements
   -
   InputIt must meet the requirements of LegacyInputIterator.

.SH Return value

   An iterator of type InputIt that holds the n^th successor (or -n^th predecessor if n
   is negative) of iterator it.

.SH Complexity

   Linear.

   However, if InputIt additionally meets the requirements of
   LegacyRandomAccessIterator, complexity is constant.

.SH Possible implementation

   template<class InputIt>
   constexpr // since C++17
   InputIt next(InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1)
   {
       std::advance(it, n);
       return it;
   }

.SH Notes

   Although the expression ++c.begin() often compiles, it is not guaranteed to do so:
   c.begin() is an rvalue expression, and there is no LegacyInputIterator requirement
   that specifies that increment of an rvalue is guaranteed to work. In particular,
   when iterators are implemented as pointers or its operator++ is
   lvalue-ref-qualified, ++c.begin() does not compile, while std::next(c.begin()) does.

.SH Example


// Run this code

 #include <iostream>
 #include <iterator>
 #include <vector>

 int main()
 {
     std::vector<int> v{4, 5, 6};

     auto it = v.begin();
     auto nx = std::next(it, 2);
     std::cout << *it << ' ' << *nx << '\\n';

     it = v.end();
     nx = std::next(it, -2);
     std::cout << ' ' << *nx << '\\n';
 }

.SH Output:

 4 6
  5

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to        Behavior as published             Correct behavior
   LWG 2353 C++11      next required LegacyForwardIterator LegacyInputIterator allowed

.SH See also

   prev         decrement an iterator
   \fI(C++11)\fP      \fI(function template)\fP
   advance      advances an iterator by given distance
                \fI(function template)\fP
   distance     returns the distance between two iterators
                \fI(function template)\fP
   ranges::next increment an iterator by a given distance or to a bound
   (C++20)      (niebloid)
